package persistencia;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.persistence.FileStreamStrategy;
import com.thoughtworks.xstream.persistence.XmlArrayList;

/**
 * Classe que implementa a persistencia em listas persistentes.
 * 
 * 
 */
public class Persistence<E> {

	// Lista de dados persistentes em XML
	private List<E> listaPersistente;

	/**
	 * Construtor de uma classe de persistencia.
	 * 
	 * @param directory
	 *            Caminho de diretorios onde se pretende salvar os arquivos XML.
	 */
	public Persistence(String directory) {
		new File(directory).mkdirs(); // Constroi a pasta do caminho se ela nao
		// existir

		this.listaPersistente = new XmlArrayList(new FileStreamStrategy(
				new File(directory))); // Construcao da lista persistente
	}

	/**
	 * Retorna uma lista de objetos na memoria que podem ser acessados e
	 * modificados.
	 * 
	 * @return a lista de objetos da memoria.
	 */
	public List<E> getList() {
		List<E> memoria = new ArrayList<E>();
		for (E dado : listaPersistente) {
			memoria.add(dado);
		}
		return memoria;
	}

	/**
	 * Persiste uma lista de objetos de memória no diretorio especifico. Antes
	 * de persistir os dados o diretorio eh esvaziado.
	 * 
	 * @param lista
	 *            A lista de dados de memoria a ser persistida.
	 */
	public void persiste(List<E> lista) {
		listaPersistente.clear();
		for (E dado : lista) {
			listaPersistente.add(dado);
		}
	}

}
